Notion APIを使ってコードブロックをローカルにファイル化してみた
Notion APIのレスポンスを元に、ブロックからコードブロックを選別した上でローカルで実行可能なファイルとして生成してみました。
NotionのAPIレスポンスはブロック単位で扱われていることもあり、取捨選択によってはリソース置き場にすることも可能です。勿論GitHubのように厳密なバージョン管理とまでは難しいのですが、GitHubに投入する前の雑なメモ書きを整理する程度であれば十分です。
試しにレスポンス中のコードブロックをローカルでファイルとして出力し、実行可能な状態にしてみました。必要なライブラリについては以前の記事を参考にしてください。
レスポンスを元にソースコードを出力する。
ページのIDを元にしてページ内ブロックを取捨選択します。必要な判定としてはtypeがcodeであること、languageに即した拡張子を指定する、の2つです。
import os from notion_client import Client from pprint import pprint notion = Client(auth=os.environ["NOTION_TOKEN"]) lang = {'python': 'py', 'plain text': 'txt'} result = notion.blocks.children.list('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') for block in result['results']: if block['type'] == 'code': language = block[block['type']]['language'] _id = block['id'] _lang = lang[language] for paragraph in block[block['type']]['rich_text']: pprint(f"{_id}.{_lang}") with open(f"{_id}.{_lang}", mode='w') as f: f.write(paragraph['plain_text'])
コードブロック単位でファイルが生成されていきます。
% python dump.py 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.txt' 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.py'
あとがき
- 厳密なバージョン管理はいらない
- テキスト以外のコンテンツも説明として挟みたい
- 必要に応じて実行用ファイルとしても出力できるようにしたい
といった辺りの要望は満たせるかもしれません。都合上ファイル名がランダム文字列となっているため、その点だけ何か工夫をするとよいでしょう。